/* 
    1、创建一个空的对象
    2、关联原型链，将对象的原型（__proto__）设置为构造函数的prototype属性
    3、让构造函数的this指向这个对象，并执行构造函数代码初始化属性
    4、判断函数返回值类型，如果是引用类型则直接返回，否则返回创建的对象
*/
// const arr = new Array([1,2,3])
function myNew() {
    let newObj = null

    const construtor = Array.prototype.shift.call(arguments)
    if (typeof construtor !== 'function') {
        return console.log('type error');
    }
    newObj = Object.create(construtor.prototype)

    let result = construtor.apply(newObj, arguments)
    if (result && (typeof result === 'object' || typeof result === 'function')) {
        return result
    } else {
        return newObj
    }
}

// 使用方法 myNew(构造函, 初始化参数)
// console.log(myNew(Array, [3,2,1]));
console.log(myNew(Object, [3,2,1]));
